package com.yetm.proxy.demo;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyTest {

    public static void main(String[] args) {

        //创建真实对象
        Huawei huawei = new Huawei();

        //动态代理增强huawei对象
        SalePhone proxy_huawei = (SalePhone) Proxy.newProxyInstance(huawei.getClass().getClassLoader(), huawei.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            /*
            代理对象调用的所有方法都会触发执行
                proxy：代理对象
                method：代理对象调用的方法
                args：代理对象调用方法时传递的参数
             */
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("proxy...");
                if (method.getName().equals("sale")) {
                    double money = (double) args[0];
                    money = money * 0.8;
                    //1.增强参数
                    Object obj = method.invoke(huawei, money);
                    //2.增强返回值
                    return obj + "_耳机";
                } else {
                    Object obj = method.invoke(huawei, args);
                    return obj;
                }
            }
        });

        //调用方法
        proxy_huawei.show();

        String phone = proxy_huawei.sale(6000);
        System.out.println(phone);
    }
}
